/**
 * 
 */
package gui;

import helden.plugin.werteplugin.PluginZauberInfo;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.DefaultListModel;
import javax.swing.JButton;
import javax.swing.JList;
import javax.swing.JTable;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;

import main.Controller;

import backend.AktiverZauber;

/**
 * @author Christian
 * 
 */
public class HauptFensterController implements ActionListener, ListSelectionListener {
	
	/**
	 * 
	 */
	private JList list = null;
	
	/**
	 * 
	 */
	private JTable table = null;
	
	/**
	 * 
	 */
	private HauptFenster hauptFenster = null;
	
	/**
	 * 
	 */
	private String listArt = "";
	
	/**
	 * 
	 * @param list Liste mit Textbausteinen
	 * @param listart Art der Liste
	 */
	public HauptFensterController(JList list, String listart) {

		this.list = list;
		this.listArt = listart;
	}
	
	/**
	 * 
	 * @param table ZauberTabel
	 * @param hauptFenster Hauptfenster
	 */
	public HauptFensterController(JTable table, HauptFenster hauptFenster) {

		this.table = table;
		this.hauptFenster = hauptFenster;
	}
	
	/**
	 * @param e Actionperformted Methode
	 */
	public void actionPerformed(ActionEvent e) {

		if (((JButton) e.getSource()).getActionCommand().equals("removefromlist-")) {
			int index = list.getSelectedIndex();
			if (index >= 0) {
				DefaultListModel listModel = (DefaultListModel) list.getModel();
				listModel.remove(index);
				String[] strings = new String[list.getModel().getSize()];
				for (int i = 0; i < strings.length; i++) {
					strings[i] = (String) list.getModel().getElementAt(i);
				}
				if (listArt.equals("Alle")) {
					Controller.getDatenController().setDaten(strings, "Alle", "Alle");
				}
			}
		}
	}
	
	/**
	 * @param e
	 *            Event
	 * @see javax.swing.event.ListSelectionListener#valueChanged(javax.swing.event.ListSelectionEvent)
	 */
	public void valueChanged(ListSelectionEvent e) {

		if (table.getSelectedRow() >= 0) {
			AktiverZauber aktiverZauber = null;
			aktiverZauber = (AktiverZauber) table.getModel()
					.getValueAt(table.getSelectedRow(), 1);
			this.paintAktivenZauber(aktiverZauber.getZauber());
			DefaultListModel listModel = (DefaultListModel) hauptFenster.getJBesondereList()
					.getModel();
			listModel.removeAllElements();
			String zauberName = aktiverZauber.getZauber().getZauberName();
			String repraesentation = aktiverZauber.getZauber().getRepraesentation();
			for (String vari : Controller.getDatenController().getDatenList(zauberName,
					repraesentation)) {
				listModel.addElement(vari);
			}
			hauptFenster.setListTransferHandler(new ListTransferHandler(hauptFenster
					.getJBesondereList(), zauberName, repraesentation));
		}
	}
	
	/**
	 * 
	 * @param aktiverZauber Zauber der Angezeigt werden soll
	 */
	private void paintAktivenZauber(PluginZauberInfo aktiverZauber) {

		hauptFenster.getJLabel3().setText("" + aktiverZauber.getZauberName());
		hauptFenster.getJAnmerkungTextArea().setText("" + aktiverZauber.getAnmerkungen());
		hauptFenster.getJKommentarTextArea().setText("" + aktiverZauber.getKommentar());
		hauptFenster.getJReichweiteTextArea().setText(aktiverZauber.getReichweite());
		hauptFenster.getJWirkungsDauerTextArea().setText(aktiverZauber.getWirkungsdauer());
		hauptFenster.getJKostenTextArea().setText(aktiverZauber.getKosten());
		hauptFenster.getJZauberDauerTextArea().setText(aktiverZauber.getZauberdauer());
	}
}
